from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json
from typing import List

mcp = FastMCP("dde-api MCP Server")
"""
面向软件：dde-api

所有 MCP tool 列表：
1. dde_api_version - 查询dde-api版本信息 - 无参数 - 返回执行结果JSON
2. dde_api_help - 检查dde-api帮助文档是否存在 - 无参数 - 返回执行结果JSON
"""

@mcp.tool()
def dde_api_version() -> str:
    """
    查询dde-api软件的版本信息
    
    参数：无
    
    返回JSON结构：
    {
        "success": bool,  # 命令是否成功执行
        "command": str,   # 执行的完整命令
        "exit_code": int, # 退出码
        "stdout": str,    # 标准输出内容
        "stderr": str     # 标准错误内容
    }
    """
    command = ["dde-api", "-version"]
    
    try:
        result = subprocess.run(command, capture_output=True, text=True, timeout=30)
        
        return json.dumps({
            "success": result.returncode == 0,
            "command": " ".join(command),
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        })
    except Exception as e:
        return json.dumps({
            "success": False,
            "command": " ".join(command),
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        })

@mcp.tool()
def dde_api_help() -> str:
    """
    检查dde-api帮助文档文件是否存在
    
    参数：无
    
    返回JSON结构：
    {
        "success": bool,  # 文件是否存在
        "command": str,   # 执行的检查命令
        "exit_code": int, # 检查结果（0表示存在，非0表示不存在）
        "stdout": str,    # 标准输出内容
        "stderr": str     # 标准错误内容
    }
    """
    command = ["test", "-f", "./help"]
    
    try:
        result = subprocess.run(command, capture_output=True, text=True, timeout=30)
        
        return json.dumps({
            "success": result.returncode == 0,
            "command": " ".join(command),
            "exit_code": result.returncode,
            "stdout": result.stdout,
            "stderr": result.stderr
        })
    except Exception as e:
        return json.dumps({
            "success": False,
            "command": " ".join(command),
            "exit_code": -1,
            "stdout": "",
            "stderr": str(e)
        })

if __name__ == "__main__":
    mcp.run()